package com.site.controller;

import com.site.common.R;
import com.site.common.annotation.AccessLimit;
import com.site.common.annotation.enums.AccessLimitStoreType;
import com.site.common.annotation.enums.AccessLimitType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/limiter")
public class LimiterController extends BaseController {

    /**
     * 接口限流，解决频繁请求接口问题
     * @return
     */
    @AccessLimit(number=2)
    @RequestMapping("/guava")
    public R<String> limiterGuava(){
        return R.ok();
    }

    /**
     * 接口限流，解决频繁请求接口问题(1秒内，只能有5个请求)
     * @return
     */
    @AccessLimit(count = 5,timeOut = 1000,store = AccessLimitStoreType.REDIS)
    @RequestMapping("/redis")
    public R<String> limiterRedis(){
        return R.ok();
    }

    /**
     * 限制接口访问次数，需要定时清除，否则访问接口受限制（限制该接口只能访问5次）
     * 解决：短信接口一天只能访问固定次数
     * @return
     */
    @AccessLimit(count = 5,type = AccessLimitType.COUNT,store = AccessLimitStoreType.REDIS)
    @RequestMapping("/redis2")
    public R<String> limiterRedis2(){
        return R.ok();
    }
}
